package com.hxk.jvm;

/**
 * jvm虚拟机类中方法加载顺序
 *      静态块>构造块>构造方法
 *      静态块只加载一次到JVM的方法区。
 *          比如MyCode类，在JVM的加载过程如下:
 *              1、将MyCode编译程MyCode.class文件
 *              2、jvm类加载器，加载到jvm的方法区，成为MyCode大Class模版数据结构
 *              3、因为MyCode类中有static修饰的方法和变量，所以会在方法区在产生一份静态对应的MyCode数据结构
 */
public class JVMClassLoadCase {

    public JVMClassLoadCase(){
        System.out.println("JVMClassLoadCase构造方法444");
    }

    {
        System.out.println("JVMClassLoadCase构造块555");
    }

    static {
        System.out.println("JVMClassLoadCase静态代码块666");
    }

    public static void main(String[] args) {
        System.out.println("JVMClassLoadCase main方法777");
        new MyCode();
        System.out.println("==================================");
        new MyCode();
        System.out.println("==================================");
        new JVMClassLoadCase();
    }
}

class MyCode{

    public MyCode(){
        System.out.println("Code构造方法111");
    }
    {
        System.out.println("Code构造块222");
    }
    static {
        System.out.println("Code静态代码块333");
    }
}